package com.eastmelon.designpattern;

/**
 * @author eastmelon
 * @date 2016年8月10日下午12:07:28
 * @version 1.0
 * @description 单例设计模式：满足一下三个条件：
 * 1.单例类只能实例一个对象
 * 2.单例类必须自己创建这个唯一的实例对象
 * 3.单例类必须给所有其他类提供这个唯一的实例对象
 */
/**
 * 
 * 饿汉式单例，在类加载的时候就初始化
 * 这种方式基于classloder机制避免了多线程的同步问题，不过，instance在类装载时就实例化，虽然导致类装载的原因有很多种，
 * 在单例模式中大多数都是调用getInstance方法，
 * 但是也不能确定有其他的方式（或者其他的静态方法）导致类装载，这时候初始化instance显然没有达到lazy loading的效果。
 */
public class Singleton {
	private static final Singleton sl = new Singleton();

	/**
	 * 私有的默认构造函数,防止其他类来实例化，只能通过 getInstance()方法来实例化对象 此类不能被继承
	 */
	private Singleton() {

	}

	/**
	 * 静态工厂方法
	 */
	public static Singleton getInstance() {
		return sl;
	}
}
